iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
自我挑戰組

NodeJS with MongoDB專案開發系列 第 21

day 20 node.js with mongo db專案開發

  • 分享至 

  • xImage
  •  

演唱會搶票系統

現代韓團流行全世界,因此一票難求,所以我們需要寫一個搶票系統,下面是用javascript寫的程式

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const port = 3000;

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

const availableTickets = 10; // 初始可用票數
const tickets = Array(availableTickets).fill(true); // 表示可用票的陣列

// 購票路由
app.post('/buy-ticket', (req, res) => {
  const { numTickets } = req.body;

  if (!numTickets || numTickets <= 0) {
    return res.status(400).json({ error: '請提供有效的票數' });
  }

  const purchasedTickets = [];
  for (let i = 0; i < numTickets; i++) {
    const index = tickets.indexOf(true);
    if (index === -1) {
      return res.status(400).json({ error: '票已售罄' });
    }

    tickets[index] = false;
    purchasedTickets.push(index);
  }

  return res.status(200).json({ message: '購票成功', purchasedTickets });
});

// 查詢可用票數路由
app.get('/available-tickets', (req, res) => {
  const numAvailableTickets = tickets.filter((ticket) => ticket === true).length;
  res.status(200).json({ availableTickets: numAvailableTickets });
});

app.listen(port, () => {
  console.log(`搶票系統運行在 http://localhost:${port}`);
});
  1. 我使用了Node.js的Express框架來建立Web應用程序。這個應用程序運行在3000端口。

  2. 我初始化了一個名為tickets的陣列,表示可用的票。初始時,假設有10張票,所以tickets陣列被設定為包含10個true值,表示所有票都是可用的。

  3. 定義了兩個主要的路由:

    • POST /buy-ticket 路由用於購買票。當客戶端向此路由發送POST請求時,它需要在請求主體中提供一個叫做numTickets的數字,指定要購買的票數。如果客戶端未提供numTickets或者提供的值不是有效的正整數,則會收到錯誤響應。否則,程式會檢查tickets陣列,尋找可用的票,然後將它們標記為已購買(false)。最後,它會返回成功購買的消息,以及已購買票的索引。

    • GET /available-tickets 路由用於查詢可用的票數。當客戶端向此路由發送GET請求時,程式會計算目前尚未被購買的票數,然後返回這個數字。

  4. 最後,我們使用app.listen方法來啟動我們的Web應用程序,並讓它在指定的端口(這裡是3000)上監聽HTTP請求。

總結來說,這個程式示例是一個簡單的搶票系統,允許客戶端購買票並查詢可用的票數。


上一篇
day 20 Mongo DB連動Node.js專案開發
下一篇
Day 22nodrjs with mongo db專案開發
系列文
NodeJS with MongoDB專案開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言